package com.sh.d1.gatewayserver;

import io.netty.channel.Channel;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 客户端信道分组,
 * 用来记录所有连入服务器的客户信道
 */
public final class ClientChannelGroup {
    /**
     * 信道字典
     */
    static private final Map<Integer, Channel> _chMap = new ConcurrentHashMap<>();

    /**
     * 私有化类默认构造器
     */
    private ClientChannelGroup() {
    }

    /**
     * 添加客户端信道
     *
     * @param ch 客户端信道
     */
    static public void add(Channel ch) {
        if (null == ch) {
            return;
        }

        int sessionId = IdSetterGetter.getSessionId(ch);

        if (sessionId > 0) {
            _chMap.put(sessionId, ch);
        }
    }

    /**
     * 根据会话 Id 获取信道
     *
     * @param sessionId 会话 Id
     * @return 客户端信道
     */
    static public Channel getBySessionId(int sessionId) {
        return _chMap.get(sessionId);
    }

    /**
     * 用户id查找channel
     * @param userId
     * @return
     */
    static public Channel getByUserId(int userId) {
        return _chMap.values().stream()
                .filter((ch)->IdSetterGetter.getUserId(ch)==userId)
                .findFirst()
                .orElse(null);
    }

    /**
     * 移除客户端信道
     * @param ch
     */
    public static void remove(Channel ch) {
        _chMap.values().remove(ch);
    }
}
